try {
	// code borrowed from http://en.wikipedia.org/wiki/XMLHttpRequest
	if(typeof XMLHttpRequest == "undefined") {
		XMLHttpRequest = function() {
			try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
			try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
			try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
			try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
			throw new TypeError("This browser does not support XMLHttpRequest.");
		};
	}


	// initialise Adjustable as an empty object
	var Adjustable = Adjustable || {};

	// initialise _IncludedScripts as an empty array
	Adjustable._IncludedScripts = [];

	/**
	 * Send a synchronous request to the script server for a script.
	 * @param {string} scriptIdentifier
	 */
	Adjustable.IncludeScript = function(scriptIdentifier) {
		try {
			// determine if the script is already included
			var scriptIncluded = false;
			var noIncludedScripts = Adjustable._IncludedScripts.length;
			for(var includedScriptIndex = 0; includedScriptIndex < noIncludedScripts; includedScriptIndex++) {
				var includedScriptIdentifier = Adjustable._IncludedScripts[includedScriptIndex];
				if(includedScriptIdentifier == scriptIdentifier) {
					scriptIncluded = true;
					break; // get out of foreach loop
				}
			}
			
			if(!scriptIncluded) {
				// the script is not included
				// create a HTTP request object
				var httpRequest = new XMLHttpRequest();
				httpRequest.open('GET', 'adjustable.php?' + scriptIdentifier, false); // synchronous
				httpRequest.send(null);
				if(httpRequest.status != 200) {
					throw new Error("Script Server returned with an HTTP status of " + req.status);
				}
				eval(httpRequest.responseText);
				Adjustable._IncludedScripts.push(scriptIndentifier);
			}
		}
		catch(e) {
			console.log(e);
			throw e;
		}
	};
}
catch(e) {
	alert("There was an error initialising the Adjustable client library.\n\n" + e.getMessage());
}